package com.ten.mall.utils;

import java.awt.image.BufferedImage;
import java.io.File;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;

import javax.imageio.ImageIO;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.Binarizer;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.DecodeHintType;
import com.google.zxing.EncodeHintType;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;

public class CodeUtils {
	/**
	 * 生成二维码
	 * @param content
	 * @throws Exception
	 */
	 public static void createQcode(String content,String filePath) throws Exception{
		 int width = 300; // 图像宽度  
	     int height = 300; // 图像高度  
	     String format = "png";// 图像类型  
	     Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
	     hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");  
	        BitMatrix bitMatrix = new MultiFormatWriter().encode(content,  
	                BarcodeFormat.QR_CODE, width, height, hints);// 生成矩阵  
	        Path path = new File(filePath).toPath();
	        MatrixToImageWriter.writeToPath(bitMatrix, format, path);// 输出图像  
	        System.out.println("输出成功.");  
	 }
	 /**
	  * 解析二维码
	  * @param filePath
	  * @return
	  */
	 public static String readQcode(String filePath){ 
	        BufferedImage image;
	        String content ="";
	        try {  
	            image = ImageIO.read(new File(filePath));  
	            LuminanceSource source = new BufferedImageLuminanceSource(image);  
	            Binarizer binarizer = new HybridBinarizer(source);  
	            BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);  
	            Map<DecodeHintType, Object> hints = new HashMap<DecodeHintType, Object>();  
	            hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");  
	            Result result = new MultiFormatReader().decode(binaryBitmap, hints);// 对图像进行解码  
	            content =result.getText();  
	        } catch (Exception e) {  
	            e.printStackTrace();  
	        } 
	        return content;
	    }  
	 
	 public static void main(String[] args) {
		 //F:\project\myTest\src\main\webapp\code\SH201802031156214353.png
		String ss = readQcode("F://project//myTest//src//main//webapp//code//SH201802031229558870.png");
		System.out.println(ss);
	}
}
